package com.hhf.feicodebackend.core.saver;

import com.hhf.feicodebackend.ai.model.enums.CodeGenTypeEnum;
import com.hhf.feicodebackend.ai.model.result.HtmlCodeResult;
import com.hhf.feicodebackend.ai.model.result.MultiFileCodeResult;
import com.hhf.feicodebackend.common.ErrorCode;
import com.hhf.feicodebackend.core.parser.strategy.HtmlCodeParser;
import com.hhf.feicodebackend.core.parser.strategy.MultiFileCodeParser;
import com.hhf.feicodebackend.core.saver.template.HtmlCodeFileSaverTemplate;
import com.hhf.feicodebackend.core.saver.template.MultiFileCodeFileSaverTemplate;
import com.hhf.feicodebackend.exception.BusinessException;

import java.io.File;

/**
 * @Author hhf
 * @Date 2025/8/11
 * @Description 代码解释执行器
 * 根据代码类型执行相应的解释逻辑
 */
public class CodeFileSaverExecutor {

    private static final HtmlCodeFileSaverTemplate htmlCodeFileSaverTemplate  = new HtmlCodeFileSaverTemplate();
    private static final MultiFileCodeFileSaverTemplate multiFileCodeFileSaverTemplate  = new MultiFileCodeFileSaverTemplate();

    /**
     * 执行代码解析
     * @param codeResult 代码结果
     * @param codeGenTypeEnum 生成代码类型
     * @return
     */
    public static File execute(Object codeResult, CodeGenTypeEnum codeGenTypeEnum,Long appId){
        return switch (codeGenTypeEnum) {
            case HTML -> htmlCodeFileSaverTemplate.execute(((HtmlCodeResult) codeResult),appId);
            case MULTI_FILE -> multiFileCodeFileSaverTemplate.execute(((MultiFileCodeResult) codeResult),appId);
            default -> {
                String errorMessage = "不支持生成类型:" + codeGenTypeEnum.getValue();
                throw new BusinessException(ErrorCode.SYSTEM_ERROR, errorMessage);
            }
        };
    }
}
